/* 
 * 
 * 
 * File:   main.c
 * Author: Jonas Gualberto Diel
 *
 * Created on 26 de Abril de 2012, 21:08
 */

#include <stdio.h>
#include <stdlib.h>
#include "biblioteca.c"

/*
 * 
 */
int main() {

    FILE *arquivo;
    char nomeDoArquivo[80];
    
    //Estrutura bmpHeader

    struct bmpHeader {
        char signature[2]; //Assinatura do arquivo "BM"
        char size[4]; //Tamanho do arquivo 
        char naoUtilizado1[2];
        char naoUtilizado2[2];
        char offSet[4];        
    } bmpHeader;

    //Tamanho da Estrutura dibHeader
    int dibHeaderSize;
    
    //Resolução da imagem
    int width;
    int height;
    
    int i;
    int pixelArraySize;
    int count = 0;
    int bcount = 0;
    
    int pixel;

    printf("\nInforme o nome do arquivo BMP:\n");
    gets(nomeDoArquivo);
    
    if ((arquivo = fopen(nomeDoArquivo, "r")) == NULL) 
    {
        printf("\nNão foi possível ler o arquivo \n\n");
        getchar();
    } 
    else 
    {
        //Lê as informacoes do BMP Header
        fread(&bmpHeader, sizeof(bmpHeader), 1, arquivo);

        //Verifica a Assinatura do arquivo BMP
        if( bmpHeader.signature[0] == 'B' && bmpHeader.signature[1] == 'M' )
        {
            fseek(arquivo, sizeof(bmpHeader), SEEK_SET);            
            fread(&dibHeaderSize, 4, 1, arquivo); //Obtem o tamanho do cabeçlho dibHearder
            fseek(arquivo, sizeof(bmpHeader)+4, SEEK_SET);
            fread(&width, 4, 1, arquivo); //Obtem o tamanho do width            
            fseek(arquivo, sizeof(bmpHeader)+8, SEEK_SET);
            fread(&height, 4, 1, arquivo); //Obtem o tamanho do height
            
            if( width!= height )
            {
                printf("Ocorreu um erro! \nA imagem deve possuir as mesmas dimensões.\nExemplo: 16x16");                
                printf("Resolução atual: ");
                printf("%d x %d ", width, height);
            }
            else
            {
                //Reprodução da imagem   
                bcount = sizeof(bmpHeader)+dibHeaderSize;
                fseek(arquivo, bcount, SEEK_SET);
                
                pixelArraySize = width*3; //Calcula a soma dos pixels mais os separadores               
                
                //Percorre cada pixel da imagem + os separadores
                for( i = pixelArraySize; i > 0; i--)
                {
                    if( count == width )
                    {
                        count = 0;                        
                        bcount += 2;
                        
                        //Adiciona o separador                        
                        printf("\n");                        
                        fseek(arquivo, bcount, SEEK_SET);                        
                    }
                    else
                    {
                        bcount += 3;
                        fread(&pixel, 3, 1, arquivo); //Obtem o tamanho do height
                        
                        //Adiciona a cor do pixel
                        
                        corCaracteres(pixel);
                        printf("X");
                        
                        fseek(arquivo, bcount, SEEK_SET);
                    }
                    
                    count++;
                }
                printf("\n");
            }
            
        }
        else
        {
            printf("O arquivo selecionado não é um arquivo BMP válido");
            getchar();
        }        
    }
    return (EXIT_SUCCESS);
}

